<?php

use app\common\service\AuthService;
use app\common\service\OplogService;
use app\common\tools\Csrf;
use app\common\tools\Data;
use app\common\tools\Node;
use think\Env;

if (!function_exists('auth')) {
    /**
     * 节点访问权限检查
     * @param string $node
     * @return boolean
     */
    function auth($node)
    {
        $real = Node::get($node);
        return AuthService::checkAuthNode($real);
    }
}
if (!function_exists('sysconf')) {
    /**
     * 设备或配置系统参数
     * @param string $name 参数名称
     * @param boolean $value 无值为获取
     * @return string|boolean
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    function sysconf($name, $value = null)
    {
        static $data = [];
        list($field, $raw) = explode('|', "{$name}|");
        $key = md5(config('database.hostname') . '#' . config('database.database'));
        if ($value !== null) {
            \think\Cache::tag('system')->rm("_sysconfig_{$key}");
            list($row, $data) = [['name' => $field, 'value' => $value], []];
            return Data::save('SystemConfig', $row, 'name');
        }
        if (empty($data)) {
            $data = \think\Cache::tag('system')->get("_sysconfig_{$key}", []);
            if (empty($data)) {
                $data = \think\Db::name('SystemConfig')->column('name,value');
                \think\Cache::tag('system')->set("_sysconfig_{$key}", $data, 60);
            }
        }
        return isset($data[$field]) ? (strtolower($raw) === 'raw' ? $data[$field] : htmlspecialchars($data[$field])) : '';
    }
}

if (!function_exists('_syslog')) {
    /**
     * 写入系统日志
     * @param string $action 日志行为
     * @param string $content 日志内容
     * @return boolean
     */
    function _syslog($action, $content)
    {
        return OplogService::write($action, $content);
    }

}

if (!function_exists('env')) {
    /**
     * 获取环境变量值
     * @access public
     * @param  string    $name 环境变量名（支持二级 .号分割）
     * @param  string    $default  默认值
     * @return mixed
     */
    function env($name = null, $default = null)
    {
        return Env::get($name, $default);
    }
}

if (!function_exists('systoken')) {
    /**
     * 生成CSRF-TOKEN参数
     * @param string $node
     * @return string
     */
    function systoken($node = null)
    {
        $real = Node::get($node);
        $csrf = Csrf::buildFormToken($real);
        return $csrf['token'];
    }
}

